﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoBD;


namespace LogicaNegocio
{
    public class GestorNúmeroRecibo
    {
        private int nroSerieUltimo;
        private long nroReciboUltimo;

        private int nroSerieNuevo;
        private long nroReciboNuevo;

        private string nroReciboFormateado;

        private const int cantDigitosNroSerie = 3;
        private const int cantDigitosRecibo = 6;

        public static int MaxNumeracionNroRecibo { get; set; }

        private void obtenerUltimoNrosRecibo()
        {
            RecibosCobroAtencionMedica.ObtenerUltimoNroRecibo(out nroSerieUltimo, out nroReciboUltimo);
        }

        public void ObtenerNuevosNumerosRecibo(out int nroSerieN, out long nroReciboN)
        {
            //1° obtenemos cuales son los ultimos numeros del ultimo recibo
            obtenerUltimoNrosRecibo();

            //luego, calculamos que valor le corresponderian al nuevo recibo, y los retornamos
            calcularNuevosNumerosRecibo();

            nroReciboN = nroReciboNuevo;
            nroSerieN = nroSerieNuevo;

        }

        private void calcularNuevosNumerosRecibo()
        {
            nroReciboNuevo = nroReciboUltimo + 1;

            //si el nro de recibo no supera la numeracion maxima, entonces el nro de serie es el mismo que el recibo anterior
            if (nroReciboNuevo <= MaxNumeracionNroRecibo)
            {
                nroSerieNuevo = nroSerieUltimo;
            }
            else //empieza una nueva serie con nroRecibo 1
            {
                nroReciboNuevo = 1;
                nroSerieNuevo = nroSerieUltimo + 1;
            }
        }

        public string FormatearNroRecibo()
        {
            int cantCaracteresNroSerie = nroSerieNuevo.ToString().Length;
            int cantCaracteresNroRecibo = nroReciboNuevo.ToString().Length;

            int difNroSerie = cantDigitosNroSerie - cantCaracteresNroSerie;
            int difNroRecibo = cantDigitosRecibo - cantCaracteresNroRecibo;

            StringBuilder strNroReciboCompleto = new StringBuilder();
            
            //agregamos el nro de serie
            for (int i = 0; i <= difNroSerie; i++)
            {
                strNroReciboCompleto.Append(0);
            }
            strNroReciboCompleto.Append(nroSerieNuevo);
            strNroReciboCompleto.Append('-');

            //agregamos el nro de recibo
            for (int i = 0; i <= difNroRecibo; i++)
            {
                strNroReciboCompleto.Append(0);
            }
            strNroReciboCompleto.Append(nroReciboNuevo);

            return nroReciboFormateado;
        }

    }
}
